package lfp.addressselector.util;


import android.text.TextUtils;

/**
 * 利用java编写的 .net的String.Format函数 <br/>
 * StringFormat.format("my name is {0}, my age is {1}","renyanwei",20); <br/>
 * 输出：my name is renyanwei, my age is 20
 */
public class StringFormat {

    /**
     * .Net 方式组装字符串
     */
    public static String Format(String str, Object... args) {
        // 这里用于验证数据有效性
        if (str == null || "".equals(str)) return "";
        if (args != null && args.length == 0) {
            return str;
        }
        String result = str;
        // 这里的作用是只匹配{}里面是数字的子字符串
        java.util.regex.Pattern p = java.util.regex.Pattern.compile("\\{(\\d+)\\}");
        java.util.regex.Matcher m = p.matcher(str);

        while (m.find()) {
            // 获取{}里面的数字作为匹配组的下标取值
            int index = Integer.parseInt(m.group(1));
            // 这里得考虑数组越界问题，{1000}也能取到值么？？
            if (index < args.length) {
                // 替换，以{}数字为下标，在参数数组中取值
                result = result.replace(m.group(), args[index] != null ? args[index].toString() : " ");
            }
        }
        return result;
    }

    /**
     * 格式化用户名 - 隐藏用户名为 *
     *
     * @param userName  源用户名
     * @param HiddCount 隐藏的位数
     * @return
     */
    public static String FormatUserName_HiddenEnd(String userName, int HiddCount) {
        if (!TextUtils.isEmpty(userName) || userName.length() < HiddCount) {
            StringBuilder sb = new StringBuilder(userName);
            for (int i = userName.length() - HiddCount; i < userName.length(); i++) {
                sb.replace(i, i + 1, "*");
            }
            userName = sb.toString();
        }
        return userName;
    }

//    public static String FormatReplaceString(String str){
//
//    }


}
